package com.msh.bird;

import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;

/**
 * Date：2021年09月
 * Author：程Sir
 * Content: 小鸟信息类
 */
public class Bird extends Global{
    public int size;
    public BufferedImage[] images;// 图片
    public int index;

    //计算小鸟的位置
    /**
     * 重力加速度       ·
     */
    public double g;
    /**
     * 两次位置的间隔时间
     */
    public double t;
    /**
     * 初始上抛速度
     */
    public double v0;
    /**
     * 是当前的上抛速度
     */
    public double speed;
    /**
     * 是经过时间t以后的位移
     */
    public double s;
    /**
     * 是鸟的倾角 弧度单位
     */
    public double angle;
    /**
     * 对于实例变量进行初始化操作
     */
    public Bird() throws Exception {
        //小鸟默认是第一张图片
        image = ImageIO.read(getClass().getResource("img/0.png"));// 如果名字写错都会出现运行异常
        width = image.getWidth();
        height = image.getHeight();
        x = 350;
        y = 250;
        size = 10;
        g = 4;
        v0 = 40;
        t = 0.25;
        speed = v0;
        s = 0;
        angle = 0;
        // 创建小鸟图片数组对象，8张图片
        images = new BufferedImage[8];
        for (int i = 0; i < 8; i++) {
            images[i] = ImageIO.read(getClass().getResource("img/" + i + ".png"));
        }
        // 初始默认是第一张小鸟的图片
        index = 0;
    }

    /**
     * 小鸟飞翔的方法
     */
    public void fly() {
        index++;
        // 让8张图片进行轮播
        image = images[(index / 12) % 8];
    }

    /**
     * 小鸟移动方法
     */
    public void step() {
        double v0 = speed;
        //计算上抛运动位移
        s = v0 * t + g * t * t / 2;
        //计算鸟的坐标位置
        y = y - (int) s;
        //计算下次的速度
        double v = v0 - g * t;
        speed = v;
        //调用Java API提供的反正切函数，计算倾角
        angle = Math.atan(s / 8);
    }

    /**
     * 重新设置初始速度，重新向上飞
     */
    public void flappy() {
        speed = v0;
    }

    /**
     * 小鸟与地面是否碰撞的方法
     * @param ground 地面对象
     * @return 如果小鸟碰撞到了地面ground，则返回true，否则返回false
     */
    public boolean hit(Ground ground) {
        boolean hit = y + size / 2 > ground.y;
        if (hit) {
            y = ground.y - size / 2;
            angle = -3.14159265358979323 / 2;
        }
        return hit;
    }

    /**
     * 小鸟和柱子是否碰撞的方法
     * @param column 柱子对象
     * @return 如果小鸟碰撞到了柱子Column，则返回true，否则返回false
     */
    public boolean hit(Column column){
        // 判断是否越界【柱子左右的判断】
        if(x>column.x - column.width/2 - size/2 && x< column.x +column.width/2 + size/2){
            // 判断是否越界【柱子上下的判断】
            if (y>column.y - column.gap/2 + size/2 && y< column.y + column.gap/2 -size/2){
                return false;
            }
            return true;
        }
        return  false;
    }












}
